La lógica del "O" y el "Y"
Dos pilares sustentan todo el campo de la combinatoria. Su aplicación depende totalmente de si vemos una tarea como una única elección entre múltiples categorías o como una secuencia de elecciones.
Si un conjunto $X$ se divide en subconjuntos disjuntos $X_1, X_2, \dots, X_n$, entonces el número total de elementos $|X|$ es la suma de los tamaños de esos subconjuntos:
$$|X| = |X_1| + |X_2| + \dots + |X_n|$$
Analogía: Elegir una comida en Kay's Quick Lunch eligiendo un sándwich del menú de platos principales O un aperitivo del menú de aperitivos. No puedes tener ambos; eliges un solo artículo.
Si una actividad consta de $t$ pasos sucesivos, donde el paso $i$ tiene $n_i$ resultados posibles, el número total de formas de completar la tarea es el producto de las posibilidades en cada paso:
$$N = n_1 \times n_2 \times \dots \times n_t$$
Analogía: Configurar un camión "Big Pickup". Debes elegir un motor (5 opciones) Y un estilo de cabaña (3 opciones). El número total de configuraciones es $5 \times 3 = 15$.
Implementación en código y complejidad
En informática, estos principios se manifiestan en estructuras de bucles. Los bucles secuenciales representan el principio de adición, mientras que los bucles anidados representan el principio de multiplicación.
para i = 1 hasta m: imprimirln(i)
para j = 1 hasta n: imprimirln(j)
// Principio de multiplicación (m * n ejecuciones)
para i = 1 hasta m:
para j = 1 hasta n:
imprimirln(i, j)